[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
미니프로젝트 12 | ✅저자: 이유정(박사)
프로젝트 코드명: UserDataValidator
프로젝트 유형: 콘솔 기반 사용자 데이터 유효성 검사 및 저장
🖥️ 프로젝트 개요
사용자가 입력한 여러 명의 사용자 정보를 검증하고,
- 이름, 나이, 이메일 형식을 검사한 뒤,
- 유효한 데이터만 리스트에 저장하고
- 유효하지 않은 항목은 에러 메시지로 출력하는 프로그램입니다.
입력은 반복적으로 받으며, 사용자가 '종료'라고 입력하면 프로그램이 종료됩니다.
◽ 이 프로젝트를 통해 자연스럽게 적용되는 내용
개념 | 적용 방식 |
---|---|
함수 정의 |
유효성 검증 함수 (이름/나이/이메일) 분리 |
예외처리 |
입력값 형식 오류(ValueError , TypeError ) 처리 |
조건문 / 반복문 |
사용자 입력 루프 및 검증 흐름 제어 |
리스트 |
유효한 사용자 정보를 저장 |
📄 기능 요구사항 (Functional Requirements)
- 이름, 나이, 이메일을 입력받음
- 이름은 빈 문자열이 아니어야 함
- 나이는 0 이상의 정수
- 이메일은
@
를 포함해야 함 - 유효하지 않으면 메시지 출력
- 유효하면 리스트에 저장
- '종료' 입력 시 프로그램 종료 및 결과 출력
📄 비기능 요구사항 (Non-Functional Requirements)
- 모든 예외 상황은 종료 없이 메시지로 안내
- 예외 메시지는 사용자 친화적으로 출력
- 최소 함수 2개 이상 사용
- 파일 저장은 필요 없음 (콘솔 출력만)
✅ 출력 포맷 구성:
이름을 입력하세요: 홍길동
나이를 입력하세요: -3
❌ 나이는 0 이상 정수여야 합니다.
이름을 입력하세요: 이수연
나이를 입력하세요: 25
이메일을 입력하세요: sooyeon@example.com
✅ 등록 완료
...
입력이 완료된 사용자 목록:
1. 이수연 (25세) - sooyeon@example.com
✅ 정답 코드:
def validate_name(name):
if not name.strip():
raise ValueError("이름은 비어 있을 수 없습니다.")
return name.strip()
def validate_age(age_str):
try:
age = int(age_str)
if age < 0:
raise ValueError("나이는 0 이상 정수여야 합니다.")
return age
except ValueError:
raise ValueError("나이는 정수여야 합니다.")
def validate_email(email):
if "@" not in email or "." not in email:
raise ValueError("올바른 이메일 형식이 아닙니다.")
return email.strip()
users = []
print("사용자 정보를 등록하세요. '종료'를 입력하면 끝납니다.")
while True:
name = input("이름을 입력하세요: ")
if name.lower() == "종료":
break
try:
name = validate_name(name)
age = validate_age(input("나이를 입력하세요: "))
email = validate_email(input("이메일을 입력하세요: "))
except ValueError as e:
print(f"❌ {e}")
continue
users.append({"name": name, "age": age, "email": email})
print("✅ 등록 완료\n")
print("\n입력이 완료된 사용자 목록:")
for i, user in enumerate(users, 1):
print(f"{i}. {user['name']} ({user['age']}세) - {user['email']}")
🔍 코드 해설:
validate_name
,validate_age
,validate_email
: 입력값마다 예외를 발생시키는 검증 함수try-except
로 예외가 발생하면 사용자에게 친절한 메시지를 출력하고 입력을 반복- 유효한 입력만
users
리스트에 저장 - 종료 시 전체 사용자 목록을 출력